www.gusucode.com > 一个美化窗口实例 VC++漂亮界面源码程序 > 一个美化窗口实例 VC++漂亮界面/其它可以引用的类源码/其它可以引用的类源码/ADOConn.cpp

    #include "StdAfx.h"
#include "ADOConn.h"
//功能:构造函数
//strData:数据库的名字
//download by www.codesc.net
CString CADOConn::GetAppPath()
{
	char lpFileName[MAX_PATH];
	GetModuleFileName(AfxGetInstanceHandle(),lpFileName,MAX_PATH);

	CString strFileName = lpFileName;
	int nIndex = strFileName.ReverseFind ('\\');
	
	CString strPath;

	if (nIndex > 0)
		strPath = strFileName.Left (nIndex);
	else
		strPath = "";
	return strPath;
}
CADOConn::CADOConn(CString strData)
{
	CString strValue;
	strData.TrimLeft();
	strData.TrimRight();
	m_strData=_bstr_t(strData);
	strValue=strData.Right(3);
	if(strValue=="mdb") m_DataType=1;
	if(strValue=="xls") m_DataType=2;
}
CADOConn::CADOConn()
{
	m_DataType=3;
}
//功能:析构函数
CADOConn::~CADOConn()
{

}
//功能:初始化数据库连接
void  CADOConn::OnInitCADOConn()
{
	// 初始化OLE/COM库环境
	::CoInitialize(NULL);
 	try
	{
		//初始化指针
		m_pConnection=NULL;
		//初始化指针
		m_pRecordset=NULL;
		// 创建Connection对象
		m_pConnection.CreateInstance("ADODB.Connection");
		// 设置连接字符串,必须是BSTR型或者_bstr_t类型	
		_bstr_t strConnect;
		switch(m_DataType)
		{
		case 1://ACCESS
			strConnect=_bstr_t("Provider=Microsoft.Jet.OLEDB.4.0;");
			strConnect=strConnect+_bstr_t("Data Source=");
			strConnect=strConnect+_bstr_t(GetAppPath())+_bstr_t("\\");
			strConnect=strConnect+m_strData;
			break;
		case 2://EXCEL
			strConnect=_bstr_t("Provider=Microsoft.Jet.OLEDB.4.0;");
			strConnect=strConnect+_bstr_t("Data Source=");
			strConnect=strConnect+_bstr_t(GetAppPath())+_bstr_t("\\");
			strConnect=strConnect+m_strData;
			strConnect=strConnect+";Extended Properties=Excel 8.0";		
			break;			
		case 3://SQLSERVER
			strConnect=_bstr_t("Provider=Microsoft.Jet.OLEDB.4.0;");
			strConnect=strConnect+_bstr_t("Data Source=D:\\FECG\\");
			strConnect=strConnect+";Extended Properties=Excel 8.0";					
			break;
		}
		m_pConnection->Open(strConnect,_bstr_t(""),_bstr_t(""),adModeUnknown);
	}
	// 捕捉异常
	catch(_com_error e)
	{	
		// 显示错误信息
		AfxMessageBox(e.Description());
	}
	ASSERT(m_pConnection != NULL);
}
//功能:执行查询
//返回值:字段集的指针
_RecordsetPtr&  CADOConn::GetRecordSet(CString strSQL)
{

	try
	{
		// 连接数据库,如果Connection对象为空,则重新连接数据库
		if(m_pConnection==NULL)OnInitCADOConn();	
		strSQL.TrimLeft();
		strSQL.TrimRight();
		// 创建记录集对象
		m_pRecordset.CreateInstance(__uuidof(Recordset));
		// 取得表中的记录
		m_pRecordset->Open(_bstr_t(strSQL),m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
	}
	// 捕捉异常
	catch(_com_error e)
	{
		// 显示错误信息
		AfxMessageBox(e.Description());
	}
	ASSERT(m_pRecordset!= NULL);
	// 返回记录集
	return m_pRecordset;
}
//功能:打开字符集
//返回值:TRUE:成功 FALSE:失败
BOOL CADOConn::Open(CString strSQL)
{
	try
	{
		// 连接数据库,如果Connection对象为空,则重新连接数据库
		if(m_pConnection==NULL) OnInitCADOConn();		
		strSQL.TrimLeft();
		strSQL.TrimRight();
		// 创建记录集对象
		m_pRecordset.CreateInstance(__uuidof(Recordset));
		// 取得表中的记录
		m_pRecordset->Open(_bstr_t(strSQL),m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
	}
	// 捕捉异常
	catch(_com_error e)
	{
		// 显示错误信息
		AfxMessageBox(e.Description());
		return FALSE;
	}
	// 返回记录集
	ASSERT(m_pRecordset!= NULL);
	return TRUE;	
}
//功能:记录集移向开头
//返回值:TRUE:成功 FALSE:失败
BOOL CADOConn::MoveFirst()
{
	if(m_pRecordset==NULL) 
		return FALSE;
	else
	{
		m_pRecordset->MoveFirst();
		return TRUE;
	}

}
//功能:记录集向下移动
//返回值:TRUE:成功 FALSE:失败
BOOL CADOConn::MoveNext()
{
	if(m_pRecordset==NULL) 
		return FALSE;
	else
	{
		if (!m_pRecordset->adoEOF)
		{
			m_pRecordset->MoveNext();
			return TRUE;
		}
		else
			return FALSE;		
	}

}
//功能:取得字段中的字符串
//index:字段集中的索引
//strSum:返回的字符的长度(<=实际:代表全部返回,>实际:左补空格)
CString CADOConn::GetValueString(int index,int strSum)
{
	_variant_t vValue;//var型返回值
	_variant_t vIndex;//索引
	CString strValue,strType,str;//strValue:初始返回值 strType:格式化字符串 str:最终返回值
	vIndex.vt=VT_I2;
	vIndex.iVal=index;
	vValue=m_pRecordset->Fields->GetItem(vIndex)->Value;
	switch(vValue.vt)
	{
	case VT_NULL:
		str="";
		break;
	case VT_ERROR:
		str="";
		break;	
	case VT_EMPTY:
		str="";
		break;
	default:
		str=(LPCSTR)_bstr_t(vValue);
	}
	strType.Format("%d",strSum);
	strType="%"+strType+"s";
	strValue.Format(strType,str);
	return strValue;
	
}
//功能:取得字段中的字节型整数
//index:字段集中的索引
byte CADOConn::GetValueByte(int index)
{
	_variant_t vValue;//var型返回值
	_variant_t vIndex;//索引
	byte bValue;//数值返回值
	vIndex.vt=VT_I2;
	vIndex.iVal=index;
	vValue=m_pRecordset->Fields->GetItem(vIndex)->Value;
	switch(vValue.vt)
	{
	case VT_NULL:
		bValue=0;
		break;
	case VT_ERROR:
		bValue=0;
		break;
	case VT_EMPTY:
		bValue=0;
		break;
	default:
		bValue=vValue.bVal;
	}
	return bValue;
}
//功能:取得字段中的字节型整数的字符串形式
//index:字段集中的索引
//strSum:返回的字符的长度(<=实际:代表全部返回,>实际:左补空格)
CString CADOConn::GetValueByteStr (int index,int strSum)
{
	_variant_t vValue;//var型返回值
	_variant_t vIndex;//索引
	byte bValue;//数值返回值
	CString strValue,strType;//strValue:字符串返回值 strType:格式化字符串
	vIndex.vt=VT_I2;
	vIndex.iVal=index;
	vValue=m_pRecordset->Fields->GetItem(vIndex)->Value;
	switch(vValue.vt)
	{
	case VT_NULL:
		bValue=0;
		break;
	case VT_ERROR:
		bValue=0;
		break;
	case VT_EMPTY:
		bValue=0;
		break;
	default:
		bValue=vValue.bVal;
	}
	strType.Format("%d",strSum);
	strType="%"+strType+"d";
	strValue.Format(strType,bValue);
	return strValue;
}
//功能:取得字段中的短整型整数
//index:字段集中的索引
int CADOConn::GetValueInt(int index)
{
	_variant_t vValue;//var型返回值
	_variant_t vIndex;//索引
	int iValue;//数值返回值
	vIndex.vt=VT_I2;
	vIndex.iVal=index;
	vValue=m_pRecordset->Fields->GetItem(vIndex)->Value;
	switch(vValue.vt)
	{
	case VT_NULL:
		iValue=0;
		break;
	case VT_ERROR:
		iValue=0;
		break;
	case VT_EMPTY:
		iValue=0;
		break;
	default:
		iValue=vValue.iVal;
	}
	return iValue;
}
//功能:取得字段中的短整型整数的字符串形式
//index:字段集中的索引
//strSum:返回的字符的长度(<=实际:代表全部返回,>实际:左补空格)
CString CADOConn::GetValueIntStr(int index,int strSum)
{
	_variant_t vValue;//var型返回值
	_variant_t vIndex;//索引
	int iValue;//数值返回值
	CString strValue,strType;//strValue:字符串返回值 strType:格式化字符串
	vIndex.vt=VT_I2;
	vIndex.iVal=index;
	vValue=m_pRecordset->Fields->GetItem(vIndex)->Value;
	switch(vValue.vt)
	{
	case VT_NULL:
		iValue=0;
		break;
	case VT_ERROR:
		iValue=0;
		break;
	case VT_EMPTY:
		iValue=0;
		break;
	default:
		iValue=vValue.iVal;
	}
	strType.Format("%d",strSum);
	strType="%"+strType+"d";
	strValue.Format(strType,iValue);
	return strValue;	
}
//功能:取得字段中的双精度浮点数
//index:字段集中的索引
double CADOConn::GetValueDouble(int index)
{
	_variant_t vValue;//var型返回值
	_variant_t vIndex;//索引
	double dValue;//数值返回值
	vIndex.vt=VT_I2;
	vIndex.iVal=index;
	vValue=m_pRecordset->Fields->GetItem(vIndex)->Value;
	switch(vValue.vt)
	{
	case VT_NULL:
		dValue=0;
		break;
	case VT_ERROR:
		dValue=0;
		break;
	case VT_EMPTY:
		dValue=0;
		break;
	default:
		dValue=vValue.dblVal;
	}
	return dValue;
}
//功能:取得字段中的双精度浮点数的字符串形式
//index:字段集中的索引
//strLSum(整数部分):返回的整数部分的长度(<=实际:代表全部返回,>实际:左补空格)
//strRSum(小数部分):返回的小数部分的长度(<=实际:代表全部返回,>实际:右补空格)
CString CADOConn::GetValueDoubleStr(int index,int strLSum,int strRSum)
{
	_variant_t vValue;//var型返回值
	_variant_t vIndex;//索引
	double dValue;//数值返回值
	CString strValue,strType;//strValue:字符串返回值 strType:格式化字符串
	vIndex.vt=VT_I2;
	vIndex.iVal=index;
	vValue=m_pRecordset->Fields->GetItem(vIndex)->Value;
	switch(vValue.vt)
	{
	case VT_NULL:
		dValue=0;
		break;
	case VT_ERROR:
		dValue=0;
		break;
	case VT_EMPTY:
		dValue=0;
		break;
	default:
		dValue=vValue.dblVal;
	}
	strType.Format("%d.%d",strLSum,strRSum);
	strType="%"+strType+"f";
	strValue.Format(strType,dValue);
	return strValue;
}
//功能:取得字段中的单精度浮点数
//index:字段集中的索引
float CADOConn::GetValueFloat(int index)
{
	_variant_t vValue;//var型返回值
	_variant_t vIndex;//索引
	float fValue;//数值返回值
	vIndex.vt=VT_I2;
	vIndex.iVal=index;
	vValue=m_pRecordset->Fields->GetItem(vIndex)->Value;
	switch(vValue.vt)
	{
	case VT_NULL:
		fValue=0;
		break;
	case VT_ERROR:
		fValue=0;
		break;
	case VT_EMPTY:
		fValue=0;
		break;
	default:
		fValue=vValue.fltVal;
	}
	return fValue;
}
//功能:取得字段中的单精度浮点数的字符串形式
//index:字段集中的索引
//strLSum(整数部分):返回的整数部分的长度(<=实际:代表全部返回,>实际:左补空格)
//strRSum(小数部分):返回的小数部分的长度(<=实际:代表全部返回,>实际:右补空格)
CString CADOConn::GetValueFloatStr(int index,int strLSum,int strRSum)
{
	_variant_t vValue;//var型返回值
	_variant_t vIndex;//索引
	float fValue;//数值返回值
	CString strValue,strType;//strValue:字符串返回值 strType:格式化字符串
	vIndex.vt=VT_I2;
	vIndex.iVal=index;
	vValue=m_pRecordset->Fields->GetItem(vIndex)->Value;
	switch(vValue.vt)
	{
	case VT_NULL:
		fValue=0;
		break;
	case VT_ERROR:
		fValue=0;
		break;
	case VT_EMPTY:
		fValue=0;
		break;
	default:
		fValue=vValue.fltVal;
	}
	strType.Format("%d.%d",strLSum,strRSum);
	strType="%"+strType+"f";
	strValue.Format(strType,fValue);
	return strValue;
}
//功能:取得字段中的长整型整数的字符串
//index:字段集中的索引
long CADOConn::GetValueLong(int index)
{
	_variant_t vValue;//var型返回值
	_variant_t vIndex;//索引
	long lValue;//数值返回值
	vIndex.vt=VT_I2;
	vIndex.iVal=index;
	vValue=m_pRecordset->Fields->GetItem(vIndex)->Value;
	switch(vValue.vt)
	{
	case VT_NULL:
		lValue=0;
		break;
	case VT_ERROR:
		lValue=0;
		break;
	case VT_EMPTY:
		lValue=0;
		break;
	default:
		lValue=vValue.lVal;
	}
	return lValue;
}
//功能:取得字段中的长整型整数的字符串形式
//index:字段集中的索引
//strSum:返回的字符的长度(<=实际:代表全部返回,>实际:左补空格)
CString CADOConn::GetValueLongStr(int index,int strSum)
{
	_variant_t vValue;//var型返回值
	_variant_t vIndex;//索引
	long lValue;//数值返回值
	CString strValue,strType;//strValue:字符串返回值 strType:格式化字符串
	vIndex.vt=VT_I2;
	vIndex.iVal=index;
	vValue=m_pRecordset->Fields->GetItem(vIndex)->Value;
	switch(vValue.vt)
	{
	case VT_NULL:
		lValue=0;
		break;
	case VT_ERROR:
		lValue=0;
		break;
	case VT_EMPTY:
		lValue=0;
		break;
	default:
		lValue=vValue.lVal;
	}
	strType.Format("%d",strSum);
	strType="%"+strType+"d";
	strValue.Format(strType,lValue);
	return strValue;	
}
//返回时间型值
//数据库中存的格式为字符串(yyyy-mm-dd HH-MM-SS)
CTime CADOConn::GetValueDate(int index)
{
	_variant_t vValue;//var型返回值
	_variant_t vIndex;//索引
	CString strValue;//数值返回值
	vIndex.vt=VT_I2;
	vIndex.iVal=index;
	vValue=m_pRecordset->Fields->GetItem(vIndex)->Value;
	switch(vValue.vt)
	{
	case VT_NULL:
		strValue="1980-08-08";
		break;
	case VT_ERROR:
		strValue="1980-08-08";
		break;
	case VT_EMPTY:
		strValue="1980-08-08";
		break;
	default:
		strValue=(LPCSTR)_bstr_t(vValue);
		break;
	}
	CString strYear,strMonth,strDay,strHour,strMin,strSec;
	strYear=strValue.Mid(0,4);
	strMonth=strValue.Mid(5,2);
	strDay=strValue.Mid(8,2);
	if(strValue.GetLength()>10)
	{
		strHour=strValue.Mid(11,2);
		strMin=strValue.Mid(14,2);
		strSec=strValue.Mid(17,2);
	}
	else
	{
		strHour="0";
		strMin="0";
		strSec="0";
	}
	CTime TValue(atoi(strYear),atoi(strMonth),atoi(strDay),atoi(strHour),atoi(strMin),atoi(strSec));
	return TValue;
}
//返回时间型值的字符串
//数据库中存的格式为字符串(yyyy-mm-dd HH-MM-SS)
CString CADOConn::GetValueDateStr(int index,CString strType)
{
	_variant_t vValue;//var型返回值
	_variant_t vIndex;//索引
	CString strValue="";//数值返回值
	vIndex.vt=VT_I2;
	vIndex.iVal=index;
	vValue=m_pRecordset->Fields->GetItem(vIndex)->Value;
	switch(vValue.vt)
	{
	case VT_NULL:
		strValue="1980-08-08";
		break;
	case VT_ERROR:
		strValue="1980-08-08";
		break;
	case VT_EMPTY:
		strValue="1980-08-08";
		break;
	default:
		strValue=(LPCSTR)_bstr_t(vValue);
		break;
	}
	CString strYear,strMonth,strDay,strHour,strMin,strSec;
	strYear=strValue.Mid(0,4);
	strMonth=strValue.Mid(5,2);
	strDay=strValue.Mid(8,2);
	if(strValue.GetLength()>10)
	{
		strHour=strValue.Mid(11,2);
		strMin=strValue.Mid(14,2);
		strSec=strValue.Mid(17,2);
	}
	else
	{
		strHour="0";
		strMin="0";
		strSec="0";
	}
	CTime TValue(atoi(strYear),atoi(strMonth),atoi(strDay),atoi(strHour),atoi(strMin),atoi(strSec));
	CString str=TValue.Format(strType);
	return str;	
}
//功能:执行SQL语句(Insert Update delete)
//strSQL:SQL语句
//返回值:TRUE:成功 FALSE:失败
BOOL CADOConn::ExecuteSQL(CString strSQL)
{
	try
	{
		// 是否已经连接数据库
		if(m_pConnection == NULL) OnInitCADOConn();
		strSQL.TrimLeft();
		strSQL.TrimRight();
		m_pConnection->Execute(_bstr_t(strSQL),NULL,adCmdText);
		return TRUE;
	}
	catch(_com_error e)
	{
		AfxMessageBox(e.Description());
		return FALSE;
	}
}
//功能:退出连接
void CADOConn::ExitConnect()
{
	try
	{
	if (m_pRecordset !=NULL) m_pRecordset->Close();
	if (m_pConnection !=NULL) m_pConnection->Close();
	// 释放环境
	::CoUninitialize();
	}
	catch (_com_error e) 
	{
		AfxMessageBox(e.Description());
	}
}
//功能:向一表中添加一行数据
//strTable:表名
//strSum:表中字段集的数目
//pszText...:strSum个数据字符串
//返回值:TRUE:成功 FALSE:错误
BOOL CADOConn::AddItem(CString strTable,int strSum,LPCTSTR pszText, ... )
{
	strTable.TrimLeft();
	strTable.TrimRight();
	CString strSQL="select * from "+strTable;
	CString strFirst=pszText;
	LPTSTR* arrpsz = new LPTSTR[strSum];//初始化一列表存放数据
	arrpsz[ 0 ] = new TCHAR[ lstrlen( pszText ) + 1 ];
	(void)lstrcpy( arrpsz[ 0 ], pszText );
 	va_list list;
	va_start( list, pszText );//向列表填充数据
	Open(strSQL);//字符集类型的查找
	strSQL="insert into "+strTable+" values(";
	int iType;
	iType=GetValueType(0);
	if (iType==ado_Field_Str||iType==ado_Field_Text||iType==ado_Field_Date)
		strSQL=strSQL+"'"+strFirst+"',";//字符型
	else
	{
		if(strFirst=="") strFirst="0";
		strSQL=strSQL+strFirst+",";//数字型
	}
	for( int iColumn = 1; iColumn <strSum; iColumn++ )
	{
		pszText = va_arg( list, LPCTSTR );
		ASSERT_VALID_STRING( pszText );
		iType=GetValueType(iColumn);
		if (iType==ado_Field_Str||iType==ado_Field_Text||iType==ado_Field_Date)
			strSQL=strSQL+"'"+pszText+"',";
		else
		{
			CString strValue=pszText;
			if(strValue=="") strValue="0";
			strSQL=strSQL+strValue+",";
		}
		arrpsz[ iColumn ] = new TCHAR[ lstrlen( pszText ) + 1 ];
		(void)lstrcpy( arrpsz[ iColumn ], pszText );
	}

	va_end( list );
	//开始执行
	strSQL=strSQL.Left(strSQL.GetLength()-1)+")";
	try
	{
		//执行插入操作
		m_pConnection->Execute(_bstr_t(strSQL),NULL,adCmdText);
		return TRUE;
	}
	catch(_com_error e)
	{
		AfxMessageBox(e.Description());
		return FALSE;
	}
}
//功能:返回索引为Index时的数据的类型
//返回值:数据类型
int CADOConn::GetValueType(int index)
{
	_variant_t vIndex;
	int Tpye;
	vIndex.vt=VT_I2;
	vIndex.iVal=index;
	Tpye=m_pRecordset->Fields->GetItem(vIndex)->GetType();
	return Tpye;	
}
//功能:判断字段集是否结束
//返回值:TRUE:结束 FALSE:未结束
BOOL CADOConn::adoEOF()
{
	if(m_pRecordset->adoEOF)
		return TRUE;
	else
		return FALSE;
}
//功能:填充列表
//listMain:列表指针 ColOpenEnd:代表展开多少列
//返回值:TRUE:成功 FALSE:失败
BOOL CADOConn::FillList(CListCtrl *listMain,int ColOpenEnd)
{
	int i,iType,iRow=0,listWidth=0;//iType:字段集的数据类型 listWidth:列表中列的宽度
	long lMax=0;
	_variant_t vIndex;
	lMax=m_pRecordset->Fields->Count;
	vIndex.vt=VT_I2;
	listMain->SetExtendedStyle( LVS_EX_FULLROWSELECT);
	listMain->DeleteAllItems();
	for(i=0;i<100;i++)
		listMain->DeleteColumn(i);
	for(i=0;i<lMax;i++)
	{	
		CString strTitle="";
		vIndex.iVal=i;
		strTitle=(LPCTSTR)m_pRecordset->Fields->GetItem(vIndex)->GetName();
		listMain->InsertColumn(i,strTitle,LVCFMT_CENTER,100,0);
	}
	if(!m_pRecordset->adoEOF)
	{	
		MoveFirst();
		while (!m_pRecordset->adoEOF)
		{
			for (i=0;i<lMax;i++)
			{
				CString strValue="";
				vIndex.iVal=i;
				iType=m_pRecordset->Fields->GetItem(vIndex)->GetType();
				switch(iType)
				{
				case ado_Field_Str:
				case ado_Field_Text:
					strValue=GetValueString(i,0);
					break;
				case ado_Field_Long:
					strValue=GetValueLongStr(i,0);
					break;
				case ado_Field_Int:
					strValue=GetValueIntStr(i,0);
					break;
				case ado_Field_Float:
					strValue=GetValueFloatStr(i,0,2);
					break;
				case ado_Field_Double:
					strValue=GetValueDoubleStr(i,0,2);
					break;
				case ado_Field_Byte:
					strValue=GetValueByteStr(i,0);
					break;
				case ado_Field_Date:
					strValue=GetValueString(i,0);
					break;
				default:
					strValue="";
					break;
				}
				if(m_DataType==2)
					strValue=GetValueString(i,0);
				if(i==0)
					listMain->InsertItem(iRow,strValue,0);
				else
					listMain->SetItemText(iRow,i,strValue);
			}
			m_pRecordset->MoveNext();
			iRow=iRow+1;
		}
		//移向开头
		MoveFirst();
	}
	if(listMain->GetItemCount()>0)
	{			
		if(ColOpenEnd>0)
		{
			for(int i=0;i<ColOpenEnd;i++)
			{
				listMain->SetColumnWidth(i,LVSCW_AUTOSIZE);
				listWidth=listMain->GetColumnWidth(i);
				listMain->SetColumnWidth(i,LVSCW_AUTOSIZE_USEHEADER);
				if(listWidth<listMain->GetColumnWidth(i))
					listMain->SetColumnWidth(i,LVSCW_AUTOSIZE_USEHEADER);
			}	
		}
		else
		{
			listMain->SetColumnWidth(i,LVSCW_AUTOSIZE_USEHEADER);
		}

	}
	else
	{
		for(i=0;i<lMax;i++)
		{
			listMain->SetColumnWidth(i,LVSCW_AUTOSIZE_USEHEADER);
			listWidth=listWidth+listMain->GetColumnWidth(i);
		}
		RECT rectList;
		listMain->GetWindowRect(&rectList);
		if(listWidth<(rectList.right-rectList.left))
		{
			listWidth=(rectList.right-rectList.left-listWidth)/11;
			listMain->SetColumnWidth(i,listMain->GetColumnWidth(i)+listWidth);
		}
	}
	return TRUE;
}
//功能:初始化自动排列列表
//CListCtrl:列表指针;colSum:列表中已经存在列数
BOOL CADOConn::InitList(CListCtrl *listMain,int colSum)
{
	int intWidth=0;
	int i;
	for(i=0;i<colSum;i++)
	{
		listMain->SetColumnWidth(i,LVSCW_AUTOSIZE_USEHEADER);
		intWidth=intWidth+listMain->GetColumnWidth(i);
	}
	RECT rectList;
	listMain->GetWindowRect(&rectList);
	if(intWidth<(rectList.right-rectList.left))
	{
		intWidth=(rectList.right-rectList.left-intWidth)/colSum;
		listMain->SetColumnWidth(i,listMain->GetColumnWidth(i)+intWidth);
	}
	return TRUE;
}